package day38;

// 蘑菇阵
// 从1开始的
// 要么向上走，要么向右走

// 经过参考！！

// 这是一个动归问题！
// 注意边界：概率为1，非边界：概率为1/2
// 注意概率计算

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int m = in.nextInt(); // 行数
            int n = in.nextInt(); // 列数
            int k = in.nextInt(); // 蘑菇数
            // 蘑菇位置的标记 注意坐标
            boolean[][] flag = new boolean[m][n];
            for (int i = 0; i < k; i++) {
                int x = in.nextInt();
                int y = in.nextInt();
                flag[x-1][y-1] = true;
            }
            // 该数组保存的是概率
            double[][] per = new double[m][n];
            per[0][0] = 1; //
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if(flag[i][j]) {
                        per[i][j] = 0;  //
                    } else if (i==0 && j==0) {
                        // 之前已经定义了
                    } else {
                        // 进行概率计算:注意边界值
                        per[i][j] = (j-1<0?0:(i+1<m?per[i][j-1]*0.5:per[i][j-1])*1)+(i-1<0?0:(j+1<n?per[i-1][j]*0.5:per[i-1][j]));
                    }
                }
            }
            double ret = per[m-1][n-1];
            System.out.println(String.format("%.2f",ret)); // 注意格式转换
        }
    }
}
